home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / qbfaqr01.zip / GWINT.BAS < prev    next >
BASIC Source File  |  1992-08-10  |  3KB  |  76 lines

  1. 100 ' MEESCALL.BAS  demonstrates how to call mouse functions in GW-BASIC
  2. 110 '
  3. 120 '   Author:     Christy Gemmell
  4. 130 '   Date:       15/9/1991
  5. 140 '
  6. 150 ' Load general-purpose interrupt service interface.
  7. 160 '
  8. 170 DEFINT A-Z: CLS: PRINT: KEY OFF
  9. 180 DIM REG.IN(7), REG.OUT(7)
  10. 190 AX = 0: BX = 1: CX = 2: DX = 3: SI = 4: DI = 5: DS = 6: ES = 7
  11. 200 SYSINT$ = SPACE$(116)
  12. 210 FOR X = 1 TO 116
  13. 220     READ A$: MID$(SYSINT$, X, 1) = CHR$(VAL("&H" + A$))
  14. 230 NEXT
  15. 240 '
  16. 250 '  Test out some mouse functions with it.
  17. 260 '
  18. 270 INT.NO = &H33   ' Microsoft Mouse driver interrupt number
  19. 280 '
  20. 290 '  Reset Mouse and get status
  21. 300 '
  22. 310 REG.IN(AX) = 0: GOSUB 770
  23. 320 IF REG.OUT(AX) = 0 THEN PRINT "Mouse not installed!": BEEP: STOP
  24. 330 PRINT "A"; REG.OUT(BX); "- button mouse is available"
  25. 340 PRINT "Turning on the Mouse pointer"
  26. 350 PRINT: PRINT "Press the <Esc> key to quit"
  27. 360 '
  28. 370 '  Show Mouse pointer
  29. 380 '
  30. 390 REG.IN(AX) = 1: GOSUB 770
  31. 400 '
  32. 410 ' Main control loop
  33. 420 '
  34. 430 IF INKEY$ = CHR$(27) THEN GOTO 600
  35. 440 '
  36. 450 '  Get Mouse pointer and button status
  37. 460 '
  38. 470    REG.IN(AX) = 3: GOSUB 770
  39. 480    LOCATE 10, 1: PRINT "X ="; REG.OUT(CX); " "
  40. 490    LOCATE 11, 1: PRINT "Y ="; REG.OUT(DX); " "
  41. 500    LOCATE 13, 1
  42. 510    IF REG.OUT(BX) = 1 THEN PRINT "Left Button Down" ELSE PRINT SPACE$(20)
  43. 520    LOCATE 14, 1
  44. 530    IF REG.OUT(BX) = 3 THEN PRINT "Centre Button Down" ELSE PRINT SPACE$(20)
  45. 540    LOCATE 15, 1
  46. 550    IF REG.OUT(BX) = 2 THEN PRINT "Right Button Down" ELSE PRINT SPACE$(20)
  47. 560 GOTO 430
  48. 570 '
  49. 580 '  Hide Mouse pointer
  50. 590 '
  51. 600 REG.IN(AX) = 2: GOSUB 770
  52. 610 END
  53. 620 '
  54. 630 '  Machine-language opcodes
  55. 640 '
  56. 650 DATA 55, 8B, EC, 8B, 5E, 0A, 8B, 07, 8B, 5E, 06, 8B, CB
  57. 660 DATA 8B, 5E, 08, 06, 1E, E8, 05, 00, 00, 00, CD, 00, C3
  58. 670 DATA 5D, 88, 46, 03, 89, 4E, 00, 8B, 4F, 04, 8B, 57, 06
  59. 680 DATA 8B, 77, 08, 8B, 7F, 0A, 8B, 47, 0E, 3D, FF, FF, 74
  60. 690 DATA 02, 8E, C0, 8B, 47, 0C, 3D, FF, FF, 74, 02, 8E, D8
  61. 700 DATA 36, 8B, 07, 36, 8B, 5F, 02, E8, CC, FF, 53, 8B, 5E
  62. 710 DATA 00, 36, 89, 07, 36, 8F, 47, 02, 8C, D8, 36, 89, 47
  63. 720 DATA 0C, 1F, 8C, C0, 89, 47, 0E, 07, 89, 4F, 04, 89, 57
  64. 730 DATA 06, 89, 77, 08, 89, 7F, 0A, 5D, CA, 06, 00, 00
  65. 740 '
  66. 750 '  Call machine-language routine
  67. 760 '
  68. 770 X = VARPTR(SYSINT$)
  69. 780 SYSINT! = PEEK(X + 1) + 256 * PEEK(X + 2)
  70. 790 CALL SYSINT!(INT.NO, REG.IN(0), REG.OUT(0))
  71. 800 RETURN
  72.  
  73. 'BTW That assembly-language routine can be used for other things than
  74. 'the mouse. It is actually a general-purpose program which you can use
  75. 'to make DOS (INT 21h) and BIOS (INT 10h, INT 16h etc) interrupt calls.
  76. 'In effect a GW-BASIC version of QuickBASIC's CALL INTERRUPT.